#include <stdio.h>
#include <string.h>
// 结构体的定义
struct Student
{
    unsigned char age : 7;
    unsigned char sex : 1;
    char *name;
};
// 取别名
typedef struct Student Student;

// 打印结构体数组
void printfArray(const Student *stu, int numSize)
{
    for (int i = 0; i < numSize; i++)
    {
        printf("name=%s,\t age =%d,\t sex=%d\n", stu[i].name, stu[i].age, stu[i].sex);
    }
}

// 交换
void swapArray(Student *stu1, Student *stu2)
{
    Student tmp = *stu1;
    *stu1 = *stu2;
    *stu2 = tmp;
}

// 交换结构体函数
void exchange(Student *array, int numSize)
{
    for (int idx = 0; idx < numSize; idx++)
    {
        for (int start = 1; start < numSize; start++)
        {
            // 前一个元素 比我当前元素要大。
            if (strcmp(array[start - 1].name, array[start].name) > 0)
            {
                swapArray(&array[start - 1], &array[start]);
            }
        }
    }
    printfArray(array, numSize);
}

int main()
{
    // // //结构体变量
    // Student s1;
    // Student s2;
    // // //结构体内存
    // // int size = sizeof(s1);
    // // printf("size =%d\n", size);
    // //结构体的赋值
    // s1.age=22;
    // s1.sex=1;
    // s1.name="wuchangyuan";
    // s2.age=23;
    // s2.sex=1;
    // s2.name="chenlei";
    // //结构体取值
    // printf("name=%s,\t age =%d,\t sex=%d\n",s1.name, s1.age, s1.sex);
    // printf("name=%s,\t age =%d,\t sex=%d\n",s2.name, s2.age, s2.sex);

    // 结构体数组
    Student array[5];
    int length = sizeof(array) / sizeof(array[0]);
    array[0].age = 22;
    array[0].sex = 1;
    array[0].name = "zhangsan";
    //
    array[1].age = 23;
    array[1].sex = 1;
    array[1].name = "lisi";
    //
    array[2].age = 20;
    array[2].sex = 1;
    array[2].name = "wangwu";
    //
    array[3].age = 19;
    array[3].sex = 1;
    array[3].name = "zhaoliu";
    //
    array[4].age = 30;
    array[4].sex = 1;
    array[4].name = "sunqi";
    //

    exchange(array, length);
    return 0;
}